Welcome to pandas!

4.10 元素填充及方向

1、元素填充

如果DataFrame表格有有缺失值,可以指定数据去填充,也可是用与缺失值相邻的数据去填充, df.fillna()函数正是具备这种填充能力的函数,结构如下:

Df.fillna(Value=None,method=None,aixs=None,inplace=False,limit=None,downcast=None)

value :填充缺失值的数据,可以是标量值、Series、字典或者DataFrame

mathod :使用相邻数据填充,backfill,bfill表示向上填充,pad、fill表示向下填充

axis : 缺失值填充方向(忽略)

inplace :就地修改

downcast :把item->dtype的字典将尝试向下转换为适当的相等类型字符串。


有如下填充方式:

1、用标填充(填充统一数据)

2、用Series填充,(不同列填充不同数据)

3、字典填充

4、用DataFrame填充:用一个全表填充另一个有空白的表,但位置须要一一对应。


import pandas as pd

df=pd.read_excel( "D:\Pyobject2023\object\测试\素材\测试素村.填充表格.xlsx" )

print (df)

# t1=df.fillna(0)#填充全部空白数据,标量填充

# s=pd.Series([ "无名氏","0","未通过"] ,["姓名","分数","状态"])

# df1=df.fillna(s) # 两组数据一一对应,等同以下字典写法

df1=df.fillna({

"姓名" : "无名氏" ,

"分数" : "0" ,

"状态" : "未通过"

})

print (df1)

返回:

姓名 分数 状态
0 张三 98.0 通过
1 NaN NaN NaN
2 李四 NaN NaN
3 NaN 58.0 未过
4 NaN 58.0 NaN
5 王二 NaN NaN

姓名 分数 状态
0 张三 98.0 通过
1 无名氏 0 未通过
2 李四 0 未通过
3 无名氏 58.0 未过
4 无名氏 58.0 未通过
5 王二 0 未通过

2、元素填充-填充方向

表格有缺失值,除了用指定数据却说填充,也可以使用缺失值上下相邻的非缺失值填充。

(1)向下填充

向下填充缺失值时,df.fillna()函数的method参数为pad或者ffill均可,也可以使用df.ffill()

(2)向上填充

向上填充时,df.fillna()函数的method参数为packfill或者bfill均可,也可以使用df.bfill()


import pandas as pd

df=pd.read_excel( "D:\Pyobject2023\object\测试\素材\测试素村.填充表格.xlsx" )

print (df)

# df1=df.fillna(method= "pad")

df1=df.ffill() #等同上一行

print (df1)

返回:

姓名 分数 状态
0 张三 98.0 通过
1 NaN NaN NaN
2 李四 NaN NaN
3 NaN 58.0 未过
4 NaN 58.0 NaN
5 王二 NaN NaN

姓名 分数 状态
0 张三 98.0 通过
1 张三 98.0 通过
2 李四 98.0 通过
3 李四 58.0 未过
4 李四 58.0 未过
5 王二 58.0 未过

3、Series字符填充

用0填充字符串是比较常见的一种方式,所以pandas专门提供了s.str.zfill()函数来解决这类问题, 它在字符串左侧填充0,结构如下

s.str.zfill(width)

width:指定填充后的统一字符长度。

比如将Series中的数字统一为四位,不足用0补齐

做字符串填充时,可以从不同位置填充,s.str.ljust()函数表示从左侧填充,s.str.rjust()

表示从右侧填充,s.str.center()表示从 两侧填充。

s.str.rfill(width,fillchar=””)

fillchar默认为空

s.str.pad (width,side=”left”,fillchar=””)

side :letf 左边 right 右边 both 两边


import pandas as pd

s=pd.Series([ "9527","666","99" ])

t1=s.str.zfill( 4 )

t2=s.str.rjust( 4 , "*" )

t3=s.str.pad( 6 , side = "both" , fillchar = "*" ) # fillchar=不能省略

print (t1)

print (t2)

print (t3)

返回:

0 9527
1 0666
2 0099

dtype: object


0 9527
1 *666
2 **99

dtype: object

0 *9527*
1 *666**
2 **99**

dtype: object